home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 025 (1987-08-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 025 (1987-08-15)(Ossowski, Stefan)(DE)(PD).adf / Graph / help.c < prev    next >
C/C++ Source or Header  |  1987-03-08  |  9KB  |  305 lines

  1. /****************************************************************************/
  2. /*   Program: Graph It II   (The C Program)                                */
  3. /*   SubModule:   help.c  1-20-87                                          */
  4. /*   CopyRight By Flynn D. Fishman  Januar 1987                            */
  5. /*   Fühl dich frei diesen Source Code zu kopieren und zu ändern           */
  6. /****************************************************************************/
  7. /* Dieses Modul enthält die Title Page, den Hilfs Text und die Suboutinen
  8.    für den Help Screen */
  9.  
  10. #include "graph.h"
  11.  
  12. static char *(HelpPages[]) =
  13. {
  14. "0",
  15. "Graph It  II   The sequal In 3D",
  16. "By Flynn D. Fishman Copyright January 1987",
  17. " ",
  18. "Fühle dich frei dieses Programm zu kopieren und weiter zugeben.",
  19. "Es ist verboten mit diesem Programm Profit zu erzielen oder den",
  20. "Namen des Autors zu ändern.",
  21. " ",
  22. "Klicken Sie das  ? Icon für Hilfestellungen oder das Y= Icon um  ",
  23. "eine Funktion einzugeben",
  24. " ",
  25. "     Schreibe deinen Kommentar an:",
  26. "        Flynn D. Fishman",
  27. "        32 WoodBrook Court S.W. Calgary",
  28. "        Alberta, Canada, T2W-4G1",
  29. "   oder UseNet (UUCP):ihnp4!watmath!watcgl!fdfishman",
  30. " ",
  31. "      Übersetzt von A.U.G.E. 4000 ",
  32. " ",
  33. " ",
  34. "1",
  35. "Seite 1                         Einführung",
  36. " ",
  37. "Graph It erlaubt Ihnen die Eingabe fast aller Funktionen.",
  38. "Diese Funktionen stellt es dan in 2d oder 3d dar.",
  39. "Funktionen werden über eine Befehlszeile eingegeben.",
  40. "Viele Parameter können auch mit der Maus geändert werden.",
  41. " ",
  42. "Notizen:",
  43. " 1. Dieses Programm ist noch nicht 100%ig fertiggestellt,",
  44. "    die Funktionalität des Prg. ist aber voll gegeben",
  45. " 2. Der mathematische Sprachumfang ist sehr groß, kennt",
  46. "    Hirachie der Operationen, aber er versteht den Umgang",
  47. "    mit Klammmern.",
  48. " 3. 3d Screens basieren auf 2d Screens.",
  49. " 4. Das Programm beinhaltet keine Fehlermeldungen wenn Sie",
  50. "    bei der Eingabe von Funktionen einen Fehler machen.",
  51. "2Icon",
  52. "Seite 2                         Icons",
  53. " ",
  54. "Die Icons auf der rechten Seite des Screens bedeuten folgendes:",
  55. "    ZOOM: vergrößert einen Teil des Graph durch klicken, halten" ,
  56. "      und loslassen der linken Maustaste.",
  57. "    MOVE: bewegt den Graph im Koordinatensystem auf die gleiche",
  58. "      Weise wie ZOOM.",
  59. "    COMMAND: erlaubt die Eingabe der Funktion oder anderer",
  60. "      Variabelen (später mehr).",
  61. "    HIDDEN SURFACE: wechselt zwischen dem Verdecken und Freigeben",
  62. "      der verdeckten Linien (nur beim 3d Graph).",
  63. "    HOME: setzt den Graph wieder auf Nullposition und setzt die" ,
  64. "      Variabelen wieder auf die Startwerte.",
  65. "    QUIT: beendet das Programm.",
  66. " ",
  67. "    HELP: Zeigt diese Hilfstexte",
  68. "3",
  69. "Seite 3                         Funktionen",
  70. " ",
  71. "Um eine Funktion einzugeben muß man zunächst das Icon anklicken,",
  72. "dann die Funktion eingeben. Z.B.: y=sin(x), z=x-y , y=sin(t). ",
  73. "Nach der Eingabe kann man noch andere Befehle eingeben oder durch",
  74. "Eingabe einer leeren Zeile den Befehlsmodus verlassen. Wenn Sie eine",
  75. "fehlerhafte Funktion eingeben, sind Sie nicht in der Lage den Modus",
  76. "zu verlassen bis Sie eine Funktion ohne Fehler eingegeben haben.",
  77. " ",
  78. "Notizen",
  79. " 1. Wenn Sie eine Funktion mit drei Variabelen eingeben schaltet",
  80. "    das Programm automatisch in den 3d-Modus.",
  81. " 2. Um eine Funktion zu löschen müßen Sie nur 'y=' eingeben. Diese",
  82. "    schaltet in den 2d-Modus zurück",
  83. " ",
  84. "Der Parser beinhaltet folgende Funktionen:",
  85. "  cos, sin, tan, exp, PI, E, atan, asin, acos, ln",
  86. "  + - * / ^",
  87. "4",
  88. "Seite 4                         andere Kommandos",
  89. " ",
  90. "folgende Befehle sind enthalten:",
  91. "xstart=  setzt den niedrigsten X-Wert.",
  92. "xend=    setzt den höchsten X-Wert.",
  93. "xlabels= setzt die Schrittgröße auf der x-Achse.",
  94. "              (Noch nicht in dieser Version)",
  95. " ",
  96. "ystart=  setzt den niedrigsten Y-Wert.",
  97. "yend=    setzt den höchsten X-Wert.",
  98. "ylabels= setzt die Schrittgröße auf der x-Achse.",
  99. "              (Noch nicht in dieser Version)",
  100. " ",
  101. "detail=  Die Anzahl der berechneten Pixel in der Funktion.",
  102.        " Z.B: detail=1 berechnet einen Y-Wert für jedes Pixel.",
  103.  " ",
  104. "Beispiel:",
  105. "    xstart=-5,    ystart=5,     detail=5,     yl=1",
  106. "5",
  107. "Seite 5                         Andere Icons"    ,
  108. " ",
  109. "x-expand: (unterer Schieber) bewegt Koordinatenkreuz ",
  110. "  auf der X-Achse.",
  111. " ",
  112. "y-expand: (rechter Schieber) bewegt Koordinatenkreuz",
  113. "  auf der Y-Achse.",
  114. " ",
  115. " " ,
  116. " ",
  117. " ",
  118. " ",
  119. " ",
  120. " ",
  121. "6",
  122. };
  123.  
  124. Help(Window, parameters)
  125. struct Window *Window;
  126. struct Graph_Parameters *parameters;
  127.     {
  128.    int page, KeepGoing, status;
  129.  
  130.    KeepGoing = TRUE;
  131.    page = FIRSTPAGE;
  132.  
  133.    while (KeepGoing)
  134.       {
  135.       PrintPage(Window, page);
  136.       status = GetPush(Window);
  137.       if (status == FORWARD) page++;
  138.       if (page > LASTPAGE) page = FIRSTPAGE;
  139.       if (status == BACKWARD) page--;
  140.       if (page < FIRSTPAGE) page = LASTPAGE;
  141.       if (status == QUIT) KeepGoing = FALSE;
  142.       }
  143.  
  144.     DrawWindow(Window, parameters);
  145.     PlotGraph(Window, parameters);
  146.     }
  147.  
  148. PrintPage(Window, page)
  149. struct Window *Window;
  150. int page;
  151.    {
  152.    int current_line, first_line, row;
  153.    int minx, miny, maxx, maxy;
  154.    char line[5];
  155.  
  156.    if (page > LASTPAGE) return(FALSE);
  157.  
  158.     minx = Window->BorderLeft;
  159.     miny = Window->BorderTop;
  160.     maxx = Window->Width - Window->BorderRight - XBORDER;
  161.     maxy = Window->Height - Window->BorderBottom - YBORDER;
  162.  
  163.    DrawRectangle(Window, 2l, minx, miny, maxx, maxy);
  164.  
  165.    sprintf(line, "%ld", page);
  166.  
  167.    current_line = 0;
  168.    while(line[0] != HelpPages[current_line++][0] );
  169.  
  170.    sprintf(line, "%ld", ++page);
  171.  
  172.    row = 0;
  173.    first_line = current_line - 1;
  174.    while(line[0] != HelpPages[current_line][0] )
  175.       Print(Window, HelpPages[current_line++], row++);
  176.    if (HelpPages[first_line][1] == 'I')
  177.       DrawImages(Window, minx+12, miny+(ICONY+2) + 10);
  178.    }
  179.  
  180. struct TextAttr myfont =
  181.    {
  182.    "topaz.font",
  183.    8, 0, 0
  184.    };
  185.  
  186. struct IntuiText textout =
  187.    {
  188.    1, 0,      /* Pen Colours            */
  189.    JAM2,      /* Drawing mode          */
  190.    0, 0,      /* Position offsets         */
  191.    &myfont,   /* Font                  */
  192.    NULL,      /* Text (To insert later)   */
  193.    NULL      /* next string            */
  194.    };
  195.  
  196. Print(Window, text, line)
  197. struct Window *Window;
  198. char text[];
  199. long int line;
  200.     {
  201.     long int minx, miny, maxx, maxy;
  202.     long y;
  203.  
  204.     minx = Window->BorderLeft;
  205.     miny = Window->BorderTop;
  206.     maxx = Window->Width - Window->BorderRight - XBORDER;
  207.     maxy = Window->Height - Window->BorderBottom - YBORDER;
  208.  
  209.    y = miny + 2 + line * (ICONY + 2) / 2;
  210.    if ( y > maxy) y = maxy;
  211.  
  212.    textout.IText = text;
  213.    PrintIText(Window->RPort, &textout, minx +5, y);
  214.     }
  215.  
  216. GetPush(Window)
  217. struct Window *Window;
  218.     {
  219.     struct IntuiMessage *NewMessage;    /* msg structure for GetMsg() */
  220.     ULONG class;                        /* used in message monitor loop */
  221.     USHORT code;                        /* used in message monitor loop */
  222.     long int x, y;
  223.     int no_button;
  224.  
  225.     long int minx, miny, maxx, maxy;
  226.  
  227.     minx = Window->BorderLeft;
  228.     miny = Window->BorderTop;
  229.     maxx = Window->Width - Window->BorderRight - XBORDER;
  230.     maxy = Window->Height - Window->BorderBottom - YBORDER;
  231.  
  232.     PrintHelpIcons(Window);
  233.  
  234.     while( NewMessage=(struct IntuiMessage *)GetMsg(Window->UserPort) )
  235.     no_button = TRUE;
  236.  
  237.     while (no_button)
  238.        {
  239.        Wait( 1 << Window->UserPort->mp_SigBit);
  240.        while( NewMessage=(struct IntuiMessage *)GetMsg(Window->UserPort) )
  241.            {
  242.            class = NewMessage->Class;
  243.            ReplyMsg( NewMessage );
  244.            if (class == MOUSEBUTTONS)
  245.               {
  246.               x = Window->MouseX;
  247.               y = Window->MouseY;
  248.               if (y > maxy - 10)
  249.                   {
  250.                   if ( x < maxx / 3) return (FORWARD);
  251.                   if ( x > maxx / 3 * 2) return (BACKWARD);
  252.                   else return (QUIT);
  253.                   }
  254.               }
  255.            }  /* end of message lists */
  256.  
  257.        }      /* end of nobuttons */
  258.     }        /* end of routines  */
  259.  
  260. PrintHelpIcons(Window)
  261. struct Window *Window;
  262.     {
  263.     long int minx, miny, maxx, maxy, x, y;
  264.  
  265.     minx = Window->BorderLeft;
  266.     miny = Window->BorderTop;
  267.     maxx = Window->Width - Window->BorderRight - XBORDER;
  268.     maxy = Window->Height - Window->BorderBottom - YBORDER;
  269.  
  270.     SetDrMd(Window->RPort, JAM2);
  271.  
  272.     y = maxy - 2;
  273.     x = minx + 6;
  274.    SetAPen(Window->RPort, 3l);
  275.     SetBPen(Window->RPort, 3l);
  276.     Move(Window->RPort, x, y);
  277.     Text(Window->RPort, " Next Page ", 11l);
  278.     SetAPen(Window->RPort, 1l);
  279.     SetBPen(Window->RPort, 2l);
  280.     Move(Window->RPort, x-1, y-1);
  281.     Text(Window->RPort, " Next Page ", 11l);
  282.  
  283.     y = maxy - 2;
  284.     x = minx + 6 + maxx / 3;
  285.    SetAPen(Window->RPort, 3l);
  286.    SetBPen(Window->RPort, 3l);
  287.    Move(Window->RPort, x, y);
  288.    Text(Window->RPort, " Go To Graph ", 13l);
  289.     SetAPen(Window->RPort, 1l);
  290.    SetBPen(Window->RPort, 2l);
  291.    Move(Window->RPort, x-1, y-1);
  292.    Text(Window->RPort, " Go To Graph ", 13l);
  293.  
  294.    y = maxy - 2;
  295.    x = minx + 6 + maxx / 3 * 2;
  296.    SetAPen(Window->RPort, 3l);
  297.    SetBPen(Window->RPort, 3l);
  298.    Move(Window->RPort, x, y);
  299.    Text(Window->RPort, " Previous Page ", 15l);
  300.     SetAPen(Window->RPort, 1l);
  301.    SetBPen(Window->RPort, 2l);
  302.    Move(Window->RPort, x-1, y-1);
  303.    Text(Window->RPort, " Previous Page ", 15l);
  304.    }
  305.